﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace JYH.Framework
{
    public class WIndowsPCHelper
    {


   //     shutdown.exe -s：关机
   //shutdown.exe -r：关机并重启
   //shutdown.exe -l：注销当前用户

   //shutdown.exe -s -t 时间：设置关机倒计时
   //shutdown.exe -h：休眠
   //shutdown.exe -t 时间：设置关机倒计时。默认值是 30 秒。

   //shutdown.exe -a：取消关机
   //shutdown.exe -f：强行关闭应用程序而没有警告
   //shutdown.exe -m \计算机名：控制远程计算机
   //shutdown.exe -i：显示“远程关机”图形用户界面，但必须是Shutdown的第一个参数
   //shutdown.exe -c "消息内容"：输入关机对话框中的消息内容
   //shutdown.exe -d[u][p]:xx:yy ：列出系统关闭的原因代码：u 是用户代码 ，p 是一个计划的关闭代码 ，xx 是一个主要原因代码(小于 256 的正整数) ，yy 是一个次要原因代码(小于 65536 的正整数)


            /// <summary>
            /// 使用dos命令进行操作
            /// </summary>
            /// <param name="cmdStr"></param>
            /// <returns></returns>
            private static string DOSCommand(string cmdStr)
            {
                System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
                info.CreateNoWindow = true;//不显示黑窗口
                info.FileName = "cmd.exe";
                info.RedirectStandardError = true;
                info.RedirectStandardInput = true;
                info.RedirectStandardOutput = true;
                info.UseShellExecute = false;
                var p = System.Diagnostics.Process.Start(info);
                //处理办法1:
                //using (System.IO.TextWriter tw= p.StandardInput)
                //{
                //    tw.WriteLine(cmdStr);
                //}

                //处理办法2:在指令后添加:&exit。
                p.StandardInput.WriteLine(cmdStr + "&exit");

                p.WaitForExit();
                string str = "";
                using (System.IO.TextReader tr = p.StandardOutput)
                {
                    str = tr.ReadToEnd();
                }

                p.Close();
                return str;
            }
            private static int ExitWindows(UFlag flag)
            {
                return ExitWindowsEx((int)flag, 0);
            }
            /// <summary>
            /// 注销,关闭,重启电脑
            /// </summary>
            /// <param name="uFlag">要执行的操作</param>
            /// <param name="dwReserved">保留值，一般设置为0</param>
            /// <returns></returns>
            [DllImport("user32.dll")]
           extern static int ExitWindowsEx(int uFlag, int dwReserved);

        /// <summary>
        /// 重启电脑
        /// </summary>
        /// <returns></returns>
        public static string ReStart()
        {
            string ss = DOSCommand("shutdown -r -t 2");
            return ss;

        
        }
        /// <summary>
        /// 注销电脑
        /// </summary>
        /// <returns></returns>
        public static string ReLogin()
        {
           return ExitWindows(UFlag.EWX_LOGOFF).ToString();

        }
        /// <summary>
        /// 关闭电脑
        /// </summary>
        /// <returns></returns>
        public static string Close()
        {
            string ss = DOSCommand("shutdown -s -t 2");
            return ss;

        }
        /// <summary>
        /// 取消关机
        /// </summary>
        /// <returns></returns>
        public static string Cancle()
        {
            string ss = DOSCommand("shutdown -a");
            return ss;
        }
       


    }
    /// <summary>
    /// PC操作功能代码
    /// </summary>
    public enum UFlag
    {
        /// <summary>
        /// 强迫终止没有响应的进程
        /// </summary>
        EWX_FORCE = 4,
        /// <summary>
        /// 注销
        /// </summary>
        EWX_LOGOFF = 0,
        /// <summary>
        /// 重启
        /// </summary>
        EWX_REBOOT = 2,
        /// <summary>
        /// 关闭系统
        /// </summary>
        EWX_SHUTDOWN = 1
    }
}
